package com.block.common.annotate;

import java.lang.annotation.*;

/**
 * 自定义注解
 * @author Uno
 *@Documented:指明该注解可以用于生成doc
 *@Inherited：该注解可以被自动继承
 *@Retention:指明在什么级别显示该注解：
 *  RetentionPolicy.SOURCE 注解存在于源代码中，编译时会被抛弃
RetentionPolicy.CLASS 注解会被编译到class文件中，但是JVM会忽略
RetentionPolicy.RUNTIME JVM会读取注解，同时会保存到class文件中
 @Target:指明该注解可以注解的程序范围
 ElementType.TYPE 用于类，接口，枚举但不能是注解
 ElementType.FIELD 作用于字段，包含枚举值
 ElementType.METHOD 作用于方法，不包含构造方法
 ElementType.PARAMETER 作用于方法的参数
 ElementType.CONSTRUCTOR 作用于构造方法
 ElementType.LOCAL_VERIABLE 作用于本地变量或者catch语句
 ElementType.ANNOTATION_TYPE 作用于注解
 ElementType.PACKAGE 作用于包
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestLimit {
    /**
     * 是否需要验证useragent 默认开启！！！！！！注意
     * @return
     */
    boolean enabledUa() default true;

    /**
     * 是否需要验证ip 默认不开启
     * @return
     */
    boolean enabledIp() default false;

    /**
     * 限制的ip 如果此处配置,则配置文件配置的ip无效
     * @return
     */
    String limitIps() default "";

    /**
     * 是否需要验证referer 默认不开启
     * @return
     */
    boolean enabledReferer() default false;
    /**
     * 是否允许linux系统访问
     * @return
     */
    boolean allowedLinux() default true;

    /**
     * 是否允许移动端访问
     * @return
     */
    boolean allowedMobile() default  true;

    /**
     * 是否允许PC访问
     * @return
     */
    boolean allowedPc() default  true;

    boolean mustWechat() default false;
    /**
     * 是否允许代理访问
     * @return
     */
    boolean allowedProxy() default  true;

    /**
     * 是否验证跨域请求
     * @return
     */
    boolean allowedCsrf() default false;
    //限定时间
    int timeLimit() default 5000;
    //限定时间timeLimit 内最大访问次数
    int timeLimitCount() default 3;
    //ip锁定天数 0表示 不限制ip访问接口次数
    int ipLockTime() default 0;
    int timeDayLimitCount() default 5;
    String timeLimitLabel() default "";
}
